public class code02 {
//    合并 k 个升序链表
public ListNode mergeKLists(ListNode[] lists) {
    // 解法一：直接进行顺序合并操作
    ListNode re = null;
    // 通过 for 循环遍历 lists 数组，分别进行合并
    for(int i = 0; i < lists.length; i++) {
        re = merge(re, lists[i]);
    }

    return re;
}

    public ListNode merge(ListNode re, ListNode list) {
        // 先来判断一下整合数组 re 中是否包含着元素
        // 如果没有，就现将第一组元素进行返回
        if(re == null || list == null) {
            return re == null ? list : re;
        }

        // 针对已有元素进行排序操作
        // 创建出一个新的链表存储信息
        ListNode head = new ListNode(0);
        ListNode flag = head;
        // 定义两个指针指向两个需要整理的链表上
        ListNode cur1 = re;
        ListNode cur2 = list;

        // 针对对称范围的元素进行对比拼接
        while(cur1 != null && cur2 != null) {
            // 将小的放在前面，组成升序排列
            if(cur1.val < cur2.val) {
                flag.next = cur1;
                cur1 = cur1.next;
            } else {
                flag.next = cur2;
                cur2 = cur2.next;
            }
            // 一轮拼接结束后，将 flag 指针后移一位
            flag = flag.next;
        }

        // 将对称拼接之外的元素进行添加
        // (这主要是每一组元素都是升序的才能这样操作)
        if(cur1 != null) {
            flag.next = cur1;
        } else {
            flag.next = cur2;
        }

        // 向上返回 head.next
        return head.next;
    }
}
